//
//  WBStatusCell.swift
//  Weibo
//
//  Created by cc on 10/17/17.
//  Copyright © 2017 cc. All rights reserved.
//

import UIKit


/// 微博cell的协义
/// 如果需要设置可选协议方法
// - 需要遵守 NSObjectProtocol 协议
// - 协议需要 @objc
// - 方法需要 @objc optional
@objc protocol WBStatusCellDelegate: NSObjectProtocol {
    //微博cell选中URL 字符串
    @objc optional func statusCellDidSelectedURLString(cell: WBStatusCell, urlString: String)
}

//微博cell
class WBStatusCell: UITableViewCell {

    ///代理属性
    weak var delegate: WBStatusCellDelegate?
    
    
    /// 微博视图模型
    var viewModel: WBStatusViewModel? {
        didSet{
            //设置微博文本
            statusLabel.attributedText = viewModel?.statusAttrText
            
            //設置被轉發微博的文字
            retweetedLabel?.attributedText = viewModel?.retweetedAttrText
            
            //设置姓名
            nameLabel.text = viewModel?.status.user?.screen_name
            //设置会员图标 - 直接获取属性，不需要计算
            membericonView.image = viewModel?.memberIcon
            
            //认证图标
            vipIconView.image = viewModel?.vipIcon
            
            //用户头像
            iconView.cz_setImage(urlString: viewModel?.status.user?.profile_image_url, placeholderImage: UIImage(named: "avatar_default_big"),isAvatar: true)
        
            //底部工具栏
            toolBar.viewModel = viewModel
        
            //配圖視圖的視圖模型
            pictureView.viewModel = viewModel
            
            
            
            //测试修改配图视图的高度
//            pictureView.heightCons.constant = viewModel?.pictureViewSize.height ?? 0
            
            //測試4張圖像
//            let count = viewModel?.status.pic_urls?.count ?? 0
//
//            if count > 4 {
//                //修改數組 -> 將末尾的數據全部刪除
//                var picURLS = viewModel?.status.pic_urls! ?? []
//                picURLS.removeSubrange((picURLS.startIndex + 4)..<picURLS.endIndex )
//                pictureView.urls = picURLS
//            } else {
//                //設置配圖視圖的URL數據
//                pictureView.urls = viewModel?.status.pic_urls
//            }
            
//            //設置配圖視圖的URL數據(被轉發和原創)
//            pictureView.urls = viewModel?.picUrls
    
            //设置来源
            sourceLabel.text = viewModel?.status.source
            
            //设置时间
            timeLabel.text = viewModel?.status.createDate?.cz_dateDescription
        }
    }
    
    
    
    //头像
    @IBOutlet weak var iconView: UIImageView!
    
    //姓名
    @IBOutlet weak var nameLabel: UILabel!
    
    //会员图标
    @IBOutlet weak var membericonView: UIImageView!
    
    //时间
    @IBOutlet weak var timeLabel: UILabel!
    
    //来源
    @IBOutlet weak var sourceLabel: UILabel!
    
    //vip
    @IBOutlet weak var vipIconView: UIImageView!
    
    //微博正文
    @IBOutlet weak var statusLabel: FFLabel!
    
    /// 底部工具栏
    @IBOutlet weak var toolBar: WBStatusToolBar!
    
    /// 配图视图
    @IBOutlet weak var pictureView: WBStatusPictureView!
    
    //被轉發微博的標籤 - 原創微博沒有此控件， 一定要用`?`
    @IBOutlet weak var retweetedLabel: FFLabel?
    
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        //離屏渲染 - 異步繪製
        self.layer.drawsAsynchronously = true
        
        //柵格化
        // -異步繪製之後，會生成一張獨立的圖像， cell在屏幕上滾動的時候，本質上是滾動這張圖片
        // cell優化，要儘量減少圖層的數量，相當於只有一層
        // 停止滾動之後，可以接收監聽
        self.layer.shouldRasterize = true
        
        // 使用 柵格化 必須注意指定分辨率
        self.layer.rasterizationScale = UIScreen.main.scale
        
        // 设置微博文本代理
        statusLabel.delegate = self
        retweetedLabel?.delegate = self
    }
}

extension WBStatusCell : FFLabelDelegate {
    func labelDidSelectedLinkText(label: FFLabel, text: String) {
        
        //判断是否是URL
        if !(text.hasPrefix("http://") || text.hasPrefix("https://")) {
            return
        }
        
        
        // 插入 ？ 表示 如果代理没有实现协议方法，就什么都不做
        // 如果使用 ！， 代理没有实现协议方法，仍然强行执行，会崩溃
        delegate?.statusCellDidSelectedURLString?(cell: self, urlString: text)
    }
}
